<?php
    header("Content-type:text/html; charset=utf-8");
    require_once('./common.func.php');
    /**
     * 自动转换字节大小
     * @param number $size
     * @return string 
     */
    function transByte($size){
    //Bytes/Kb/MB/GB/TB/EB
    $arr = array("B","KB","MB","GB","TB","EB");
    $i = 0;
    while($size >= 1024){
        $size /= 1024;
        $i++;
    }
    return round($size,2).$arr[$i];
    }

    /**
     * 创建文件
     * @param  string $filename 文件创建的路径
     * @return string           提示信息
     */
    function createFile($filename){
        //验证文件名合法性,是否包含/,*,<>,?,|
        $pattern="/[\/,\*,<>,\?\|]/";
        if(checkFilename($filename)){
            if(!file_exists($filename)){
                $filename = mb_convert_encoding($filename, 'GBK');
                if(touch($filename)){
                    return "文件创建成功";
                }
                else{
                    return "文件创建失败";
                }
            }
            else{
                return "文件已存在，请重命名后创建";
            }
        }
        else{
            return "非法文件名";
        }
    }

    /**
     * 文件重命名函数
     * @param  string $oldname 旧文件名
     * @param  string $newname 新文件名
     * @return string          提示信息
     */
    function renameFile($oldname,$newname){
        $path = dirname($oldname);
        $newpath = $path.'/'.$newname;
        $newpath = mb_convert_encoding($newpath,"GBK");
        $oldname = mb_convert_encoding($oldname,"GBK");
        //检测文件名是否合法
        if(checkFilename($newname)){
            //检测文件是否存在
            if(file_exists($newpath)){
                return '文件已存在,请重新命名';
            }
            else{
                //为文件重命名
                if(rename($oldname,$newpath)){
                    return '重命名成功';
                }
                else{
                    return '重命名失败';
                }
            }
        }
        else{
            return '文件名非法，请重新命名';
        }

    }

    /**
     * 检测文件名是否合法
     * @param  string $filename 传入的文件名
     * @return bool             合法与否的标志
     */
    function checkFilename($filename){
        //验证文件名合法性,是否包含/,*,<>,?,|
        $pattern="/[\/,\*,<>,\?\|]/";
        $path = dirname($filename);
        if($path == '.'){
            //没有目录
            if(preg_match($pattern,$filename)){
                return false;
            }
            else{
                return true;
            }                
        }
        else{
            //有目录
            if(preg_match($pattern,basename($filename))){
                return false;
            }
            else{
                return true;
            }
        }
    }

    /**
     * 删除文件
     * @param  string $filename 要删除的文件名
     * @return string           提示信息
     */
    function delFile($filename){
        $filename = mb_convert_encoding($filename, "GBK");
        if(unlink($filename)){
            return '文件删除成功';
        }
        else{
            return '文件删除失败';
        }
    }

    /**
     * 下载文件
     * @param  string $filename 下载文件
     * @return [type]           [description]
     */
    function downFile($filename){
        $stack = explode('/',$filename);
        $basename = array_pop($stack);
        $filename = mb_convert_encoding($filename,"GBK");
        header('content-disposition:attachment;filename='.$basename);
        header("content-length:".filesize($filename));
        readfile($filename);
    }

    /**
     * 复制文件
     * @param  string $filename 原文件名
     * @param  string $dstname  目标目录
     * @return string           提示信息
     */
    function copyFile($filename,$dstname){
        $dstname1 = mb_convert_encoding($dstname,'GBK');
        if(file_exists($dstname1)){
            $stack = explode('/',$filename);
            $basename = array_pop($stack);
            $filename = mb_convert_encoding($filename, 'GBK');
            $dstname1 = mb_convert_encoding($dstname.'/'.$basename,'GBK','UTF-8');
            if(!file_exists($dstname1)){
                if (copy($filename,$dstname1)){
                    $mes = '复制文件成功';
                }
                else{
                    $mes = '复制文件失败';
                }
            }
            else{
                $mes = '存在同名文件';
            }
        }
        else{
            $mes = '目标目录不存在';
        }
        return $mes;
    }

    /**
     * 剪切文件
     * @param  string $filename 源文件
     * @param  string $dstname  目标文件夹
     * @return string          提示信息
     */
    function cutFile($filename,$dstname){
        $dstname1 = mb_convert_encoding($dstname,'GBK');
        if(file_exists($dstname1)){
            $stack = explode('/',$filename);
            $basename = array_pop($stack);
            $filename = mb_convert_encoding($filename, 'GBK');
            $dstname1 = mb_convert_encoding($dstname.'/'.$basename,'GBK','UTF-8');
            if(!file_exists($dstname1)){
                if(rename($filename,$dstname1)){
                    $mes = '剪切文件成功';
                }
                else{
                    $mes = '剪切文件失败';
                }
            }
            else{
                $mes = '存在同名文件';
            }
        }
        else{
            $mes = '目标目录不存在';
        }
        return $mes;
    }

    /**
     * 上传文件
     * @param  string $fileInfo 上传源文件
     * @param  string $path     上传路径
     * @return string           提示信息
     */
    function uploadFile($fileInfo,$path){
        //判断上传是否有错
        if($fileInfo['error']==UPLOAD_ERR_OK){
            //判断是否通过http post上传
            if(is_uploaded_file($fileInfo['tmp_name'])){
                //判断上传文件是否合法
                $allowExt = array('gif','jpg','jpeg','txt');
                $maxSize = 10485760;
                $ext = getExt($fileInfo['name']);
                $uniqid = getUniqidName(10);
                $destination = $path.'/'.getFileName($fileInfo['name']).'_'.$uniqid.'.'.$ext;
                $destination = mb_convert_encoding($destination, 'GBK');
                if(in_array($ext,$allowExt)){
                    if($fileInfo['size']<=$maxSize){
                        if(move_uploaded_file($fileInfo['tmp_name'],$destination)){
                            $mes = '文件上传成功';
                        }
                        else{
                            $mes = '文件上传失败';
                        }
                    }
                    else{
                        $mes = '文件过大';
                    }
                }
                else{
                    $mes = '非法文件类型';
                }
            }
            else{
                $mes = '文件不是通过http post上传的';
            }
        }
        else{
            $mes = '上传出错';
        }
        return $mes;
    }

?>